﻿using System;
using System.Collections.Generic;
using FluorineFx;
using Neturion.Dados;
using Neturion.Fachadas;

namespace Neturion.Servicos
{
    [RemotingService]
    public class ServicoMovimentoFinanceiro
    {
        public MovimentoFinanceiro Inserir(MovimentoFinanceiro movimentoFinanceiro, Usuario usuarioPermissao)
        {
            return Fachada.GetInstancia().Inserir(movimentoFinanceiro, usuarioPermissao);
        }

        public MovimentoFinanceiro AceitarMovimentoFinanceiro(MovimentoFinanceiro movimentoFinanceiro, Usuario usuarioPermissao)
        {
            return Fachada.GetInstancia().AceitarMovimentoFinanceiro(movimentoFinanceiro,usuarioPermissao);
        }

        public MovimentoFinanceiro EstornarMovimentoFinanceiro(MovimentoFinanceiro movimentoFinanceiro, Usuario usuarioPermissao)
        {
            return Fachada.GetInstancia().EstornarMovimentoFinanceiro(movimentoFinanceiro, usuarioPermissao);
        }

        public IList<MovimentoFinanceiro> InserirRotinaMovimentoFinanceiro(MovimentoRotina movimentoRotina, Usuario usuarioPermissao)
        {
            return Fachada.GetInstancia().InserirRotinaMovimentoFinanceiro(movimentoRotina, usuarioPermissao);
        }

        public MovimentoFinanceiro AjustarMovimentoFinanceiro(MovimentoAjuste movimentoAjuste, Usuario usuarioPermissao)
        {
            return Fachada.GetInstancia().AjustarMovimentoFinanceiro(movimentoAjuste, usuarioPermissao);
        }

        public MovimentoFinanceiro Atualizar(MovimentoFinanceiro movimentoFinanceiro, Usuario usuarioPermissao)
        {
            return Fachada.GetInstancia().Atualizar(movimentoFinanceiro,usuarioPermissao);
        }

        public void Excluir(MovimentoFinanceiro movimentoFinanceiro)
        {
            Fachada.GetInstancia().Excluir(movimentoFinanceiro);
        }

        public MovimentoFinanceiro ObterMovimentoFinanceiroPorId(long id, Usuario usuarioPermissao)
        {
            return Fachada.GetInstancia().ObterMovimentoFinanceiroPorId(id, usuarioPermissao);
        }

        public IList<MovimentoFinanceiro> ObterTodosMovimentoFinanceiros()
        {
            return Fachada.GetInstancia().ObterTodosMovimentoFinanceiros();
        }

        public IList<MovimentoFinanceiro> ObterTodosMovimentoFinanceiros(int inicio, int quantidade, int quantidadeMinima, Usuario usuarioPermissao, EnumTipoMovimentoFinanceiro enumTipoMovimentoFinanceiro, string documento, string numeroMovimento, string descricao, EnumSituacaoMovimento enumSituacaoMovimento, bool parcelado, Pessoa credorDevedor, Setor setor, FonteGeradora fonteGeradora, ContaContabil contaContabil, DateTime? emissaoDe, DateTime? emissaoAte, DateTime? vencimentoDe, DateTime? vencimentoAte, DateTime? aceitoDe, DateTime? aceitoAte, DateTime? quitadoDe, DateTime? quitadoAte, DateTime? estornadoDe, DateTime? estornadoAte, string valorDe, string valorAte, FormaPagamento formaPagamento, TipoFormaPagamento tipoFormaPagamento)
        {
            return Fachada.GetInstancia().ObterTodosMovimentoFinanceiros(inicio, quantidade, quantidadeMinima, usuarioPermissao, enumTipoMovimentoFinanceiro, documento, long.Parse(!string.IsNullOrEmpty(numeroMovimento)?numeroMovimento:"0"), descricao, enumSituacaoMovimento, parcelado, credorDevedor, setor, fonteGeradora, contaContabil, emissaoDe, emissaoAte, vencimentoDe, vencimentoAte, aceitoDe, aceitoAte, quitadoDe, quitadoAte, estornadoDe, estornadoAte, decimal.Parse(valorDe), decimal.Parse(valorAte), formaPagamento, tipoFormaPagamento);
        }

        public string GeracaoBoleto(MovimentoFinanceiro movimentoFinanceiro, Pessoa sacado, ContaBanco contaBanco, FormaPagamento formaPagamento, Usuario usuarioPermissao)
        {
            return Fachada.GetInstancia().GeracaoBoletoPorMovimentoFinanceiro(movimentoFinanceiro, sacado, contaBanco, formaPagamento, usuarioPermissao);
        }
    }
}